!theme mono

skinparam componentStyle rectangle
skinparam componentFontSize 12
skinparam arrowFontSize 11
skinparam arrowThickness 2

title HealthSync 역설계 논리 아키텍처 (개발 소스 기반)

' 클라이언트 (Backends for Frontends 패턴)
package "클라이언트 계층" #lightcyan {
    [React 모바일 웹앱] as MobileApp
}

' API Gateway & Service Mesh (Gateway Routing 패턴)
package "Gateway 계층" #lightyellow {
    [API Gateway\n(Spring Cloud Gateway)] as APIGateway
    [Service Mesh (Istio)] as ServiceMesh
}

' Clean Architecture 기반 마이크로서비스
package "사용자 컨텍스트" #lightgreen {
    [User Service\n(Clean Architecture)] as UserService
    note right of UserService
      **주요 기능**
      • Google SSO 인증
      • 사용자 프로필 관리
      • 직업군별 코드 변환
      • JWT 토큰 생성/검증
    end note
}

package "건강 컨텍스트" #lightgreen {
    [Health Service\n(Clean Architecture)] as HealthService
    note right of HealthService
      **주요 기능**
      • 건강검진 데이터 연동
      • 정상치 기준 비교 분석
      • Azure Blob 파일 업로드
      • 건강 위험도 계산
      • 캐싱 기반 성능 최적화
    end note
}

package "목표 컨텍스트" #lightgreen {
    [Goal Service\n(Clean Architecture)] as GoalService
    note right of GoalService
      **주요 기능**
      • 미션 선택/관리
      • 목표 달성 추적
      • 이력 분석
      • 진행률 계산
    end note
}

package "지능형서비스 컨텍스트" #lightgreen {
    [Intelligence Service\n(Clean Architecture)] as IntelligenceService
    note right of IntelligenceService
      **주요 기능**
      • Claude AI 기반 건강 진단
      • 개인화 미션 추천
      • 챗봇 상담
      • 독려 메시지 생성
      • 배치 알림 처리
    end note
}

' 통합 데이터 저장소
package "데이터 저장소" #lightpink {
    [PostgreSQL\n(통합 DB)] as PostgreSQL
    [Redis Cache] as Redis
    [Azure Blob Storage\n(건강검진 파일)] as BlobStorage
    
    note right of PostgreSQL
      **통합 스키마**
      • User 테이블
      • Health 관련 테이블
      • Goal 관련 테이블
      • Normal Range 테이블 (신규)
      • Chat History 테이블
    end note
}

' 메시징 인프라 (Event-Driven Architecture)
package "메시징 인프라" #lightsalmon {
    [Azure Service Bus\n(Event Store)] as EventStore
    [Command Queue] as CommandQueue
}

' 외부 시스템 연동 (Anti-Corruption Layer 패턴)
package "외부 시스템" #lightblue {
    [Google SSO] as GoogleSSO
    [Claude API] as ClaudeAPI
}

package "보호 계층" #orange {
    [Auth ACL] as AuthACL
    [AI Service ACL] as AIACL
}

' === 핵심 처리 흐름 (개발 소스 기반) ===

' 1. 클라이언트 요청
MobileApp -[#blue,thickness=3]-> APIGateway : "1. RESTful API 요청"

' 2. Gateway Routing
APIGateway -[#green,thickness=2]-> ServiceMesh : "2. 서비스 라우팅 & 로드밸런싱"

' 3. Clean Architecture 기반 서비스 호출
ServiceMesh -[#purple,thickness=2]-> UserService : "3a. /api/users/* - 인증 & 프로필"
ServiceMesh -[#purple,thickness=2]-> HealthService : "3b. /api/health/* - 건강데이터"
ServiceMesh -[#purple,thickness=2]-> GoalService : "3c. /api/goals/* - 목표관리"
ServiceMesh -[#purple,thickness=2]-> IntelligenceService : "3d. /api/intelligence/* - AI 분석"

' 4. 통합 데이터 저장 (PostgreSQL)
UserService -[#red,thickness=2]-> PostgreSQL : "4a. 사용자 & 직업코드 데이터"
HealthService -[#red,thickness=2]-> PostgreSQL : "4b. 건강검진 & 정상치 데이터"
GoalService -[#red,thickness=2]-> PostgreSQL : "4c. 목표 & 미션 데이터"
IntelligenceService -[#red,thickness=2]-> PostgreSQL : "4d. 채팅 & 분석 이력"

' 5. Azure Blob Storage 연동
HealthService -[#brown,thickness=2]-> BlobStorage : "5. 건강검진 파일 저장"

' 6. Redis 캐싱 (Cache-Aside 패턴)
HealthService -[#orange,thickness=2]-> Redis : "6a. 건강이력 캐싱 (1시간)"
IntelligenceService -[#orange,thickness=2]-> Redis : "6b. AI 분석결과 캐싱 (30분)"
GoalService -[#orange,thickness=2]-> Redis : "6c. 활성미션 캐싱 (30분)"

' 7. 외부 시스템 연동 (ACL 패턴)
UserService -[#navy,thickness=2]-> AuthACL : "7a. Google 인증 요청"
AuthACL -[#navy,thickness=2]-> GoogleSSO : "7b. OAuth 2.0 인증"
IntelligenceService -[#navy,thickness=2]-> AIACL : "7c. Claude AI 요청"
AIACL -[#navy,thickness=2]-> ClaudeAPI : "7d. AI 분석/채팅 API"

' 8. 이벤트 기반 통신
UserService -[#magenta,thickness=2,dashed]-> EventStore : "8a. 사용자 등록/수정 이벤트"
HealthService -[#magenta,thickness=2,dashed]-> EventStore : "8b. 건강데이터 동기화 이벤트"
GoalService -[#magenta,thickness=2,dashed]-> EventStore : "8c. 목표달성 이벤트"

' 9. Command/Query 분리
EventStore -[#cyan,thickness=2,dotted]-> CommandQueue : "9a. 배치 명령 큐"
CommandQueue -[#cyan,thickness=2,dotted]-> IntelligenceService : "9b. 주기적 알림 처리"

' === 패턴 적용 노트 ===
note right of APIGateway
  **Gateway 패턴**
  • JWT 토큰 검증
  • Rate Limiting
  • CORS 처리
  • 로드밸런싱
end note

note right of PostgreSQL
  **통합 DB 패턴**
  • 마이크로서비스별 스키마 분리
  • 트랜잭션 일관성
  • 정상치 기준 중앙 관리
end note

note right of Redis
  **캐싱 패턴**
  • Cache-Aside
  • TTL 기반 만료
  • 성능 최적화
end note

note right of EventStore
  **이벤트 패턴**
  • 비동기 통신
  • 서비스 간 결합도 최소화
  • 확장성 확보
end note